/*
* Clase para manejar el puntaje y control de archivos para
* mostrar y guardar el topTen.
*/
package sudoku.Extras;
import java.util.LinkedList;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;
import sudoku.Vista.VistaPuntaje;
/**
*
* @author User
*/
public class Puntaje {
long tiempoActual; //almacenar tiempo actual.
/*
* Constructor de la clase puntaje.
*/
public Puntaje(){
tiempoActual = System.currentTimeMillis();
}
/*
* calcula el puntaje y comprueba con los demas puntajes del topTen.
* @param dificultad para saber que topTen es.
*/
public void finalizarPuntaje(int dificultad){
tiempoActual = ((System.currentTimeMillis()) - tiempoActual)/1000 ;
comprobarPuntaje(dificultad);
}
/*
* Comprueba el puntaje obtenido si pertence al topTen o no.
* @param dificultad para saber que topTen es.
*/
private void comprobarPuntaje(int dificultad){
try{
String nombreArchivo = "TopTen"+dificultad;
Archivo topTen = new Archivo(nombreArchivo);
//Abre archivo correspondiente a la dificultad.
LinkedList<String> listaTopTen = topTen.leerArchivo();
String nombre = "";
if (listaTopTen.isEmpty()){
nombre = obtenerNombre();
String tiempoString = Long.toString(tiempoActual) + "\t"+nombre+"\t" ;
listaTopTen.add(tiempoString);
}else {
int indice = 0;
boolean encontro = false;
while(indice<listaTopTen.size() && !encontro){
StringTokenizer st = new StringTokenizer (listaTopTen.get(indice), "\t");
String tiempo = st.nextToken();
if (tiempoActual < Integer.parseInt(tiempo)){
encontro = true;
}
indice++;
}
nombre = obtenerNombre();
String tiempoString = Long.toString(tiempoActual) + "\t"+nombre+"\t";
if (encontro){
indice--;
listaTopTen.add(indice,tiempoString);
}else{
listaTopTen.add(tiempoString);
}
if (listaTopTen.size() > 10)
listaTopTen.remove(10);
}
// Escribe el archivo nuevamente
topTen.escribirArchivo(listaTopTen);
}
catch(Exception e){
e.printStackTrace();
}
}
/*
* pide al usuario que ingrese su nombre.
* @return nombre de usuario, anonimo si es blanco o null.
*/
private String obtenerNombre(){
String nombre = "";
nombre = JOptionPane.showInputDialog(null, "Introduzca su Nombre", "Nuevo Record", JOptionPane.QUESTION_MESSAGE) ;
if ((nombre == null) || (nombre.isEmpty())){
nombre = "Anonimo";
}
return nombre;
}
/*
* Muestra el topTen.
* @dificultad para leer el archivo correcto
*/
public static void mostrarPuntaje(int dificultad) {
try{
String nombreArchivo = "TopTen"+dificultad;
Archivo topTen = new Archivo(nombreArchivo);
LinkedList<String> listaTopTen = topTen.leerArchivo();
VistaPuntaje vistaTopTen = new VistaPuntaje(listaTopTen);
}catch(Exception e){}
}
}